package com.lianqi.emcpframework.extend.script;

import java.util.Map;


/**
 * @program emcp-framework
 * @ClassName DynamicScriptEngine
 * @description: 动态脚本引擎定义
 * @author: sky
 * @create: 2018/12/04 19:17
 */
public interface DynamicScriptEngine {
    /**
     * 引擎初始化
     * @param contents 初始化内容
     * @throws Exception 异常
     */
    void init(String... contents) throws Exception;

    /**
     * 编译脚本
     * @param id 脚本ID
     * @param script 脚本
     * @return 编译是否成功
     * @throws Exception 异常
     */
    boolean compile(String id,String script) throws Exception;

    /**
     * 获取脚本上下文
     * @param id 脚本ID
     * @return 脚本上下文
     */
    ScriptContext getContext(String id);

    /**
     * 脚本是否已编译
     * @param id 脚本id
     * @return 脚本是否已编译
     */
    boolean complied(String id);

    /**
     * 删除脚本
     * @param id 脚本id
     * @return 删除是否成功
     */
    boolean remove(String id);

    /**
     * 执行脚本
     * @param id 脚本ID
     * @param params 脚本参数
     * @return 脚本执行结果
     */
    ExecuteResult excute(String id, Map<String,Object> params);

    /**
     * 执行脚本
     * @param id 脚本ID
     * @return 脚本执行结果
     */
    ExecuteResult excute(String id);

    /**
     * 添加监听器
     * @param listener 监听器
     */
    void addListener(ScriptListener listener);

    /**
     * 添加全局变量
     * @param vars 全局变量
     */
    void addGlobalVariable(Map<String,Object> vars);
}
